Конечно можно, но триггерно. В варкравте нету дефолтных аур которые бы влияли на магический урон.
Раз в 2 сек. проверяешь есть ли у юнитов на карте бафф ауры пустышки (чародейской ауры или ауры ускорения, основа не важна). Если есть, но у юнита нету спеллбука с скиллом благословление элуный - который повышает урон от магии на n %, то вручаем запрещённый спеллбук этому юниту, если у юнита нету баффа ауры но есть спеллбук удаляем спеллбук. Все просто.
В триггерах тип действий "Камера". Если конкретно расстояние до цели надо поменять, то "Камера - Установить Поле Камеры (Время)" ("Камера - Set Camera Field (Timed)").
Вероятнее всего, ты повышаешь камеру выше скайбокса.
Вероятные решения проблемы:
а) Уменьшить самих юнитов и стилизовать ланд под маленькие модели.
б) Вставить нестандартный скайбокс с огромным размером.
(я бы выбрал первый вариант, потому что он круче)
если тебе звук нужен только для обладателя героя, то ты используешь вместо current camera view
position of hero[GetPlayerId(GetLocalPlayer())]
где hero - массив героев, индекс это номер игрока начиная с нуля
то есть hero[0] красный геро, hero[1] синий и т.д.
тогда это вернет позицию локального героя, а если герой не существует то центр карты
Перезаход обязателем, ибо другие "некачественые" в плане кода карты, вызывают десинхи в вашей игре
Наличие читов может вызывать десинхи, много раз замечал, когда в гарене хоставал, люди сами говорили, что в моей карте переставало выкидывать, только после того как они МХ (мапхак) отключат
Высокая нагрузка на триггер инициализации, частая проблема огромных проектов, рекомендуется сделать отложенную инициализацию, например предзагрузку способностей на пролаг первых 10 секунд игры
Выводы: если все будут писать идельный код и играть на последнем патче, то не будут портить игру другим этими вылетами
Я изначально знал, что мой код плохой (использование мемхака (не путать с мапхакам)), и чтобы другим не портить жизнь закрывал вакрафт после завершения игры
Kanteu, у тебя в описаниях стоит код AUdc, тебе нужно его заменить на равкод твоей способности. Чтобы его узнать, выдели способность и нажми Ctrl+D. Перед двоеточием будет равкод способности.
Это конкретно по ошибке... а вообще - не надо смотреть видео от этого человека, он тебя плохому научит... правда. А другим потом придётся тебя переучивать, если ты сам это дело не забросишь
Ах, я понял чего ты хочешь конкретно сейчас. Чтобы модель смотрела в камеру, словно на экране выбора персонажа? В таком случае ситуация немного упрощается.
Нам больше не нужно хранить текущую матрицу поворота эффекта, ведь мы не производим ее вращение, вместо этого мы высчитывает всю необходимую ориентацию из положения камеры и самого эффекта. Подход, в целом, остается прежним, но для поиска осей ориентации мы теперь будем использовать некоторый вспомогательный вектор, чье направление совпадает с направлением глобальной оси Z, и путем векторного произведения этого вспомогательного вектора на вектор оси X эффекта (получаемый как и прежде p2 - p1) мы получаем вектор ориентации эффекта Y, а векторное произведение X на Y нам даст ось Z эффекта.
Весь процесс можно разжевать на множество абзацев, но делать этого нет смысла. Я проще скину твою карту с новым вариантом.
Тем не менее, я вижу некоторое непонимание темы и потому считаю должным указать на некоторые ошибки в твоем прошлом коде
Код
private function RotationMatrixToEuler takes MATRIX3 R returns VECTOR3
local real x
local real y
local real z
local real sy = SquareRoot(R.m11 * R.m11 + R.m21 * R.m21)
local boolean singular = sy < .000001 or sy == 0 // If
if not singular then
set x = Atan2(R.m32 , R.m33)
set y = Atan2(-R.m31, sy)
set z = Atan2(R.m21, R.m11)
else
set x = Atan2(-R.m23, R.m22)
set y = Atan2(-R.m31, sy)
set z = 0
endif
return VECTOR3.New_1(x, y, z)
endfunction
Я не понимаю, как работает эта функция. В моем понимании, преобразование матрицы поворота в углы Эйлера происходит за счет обратного преобразования. То есть, чтобы преобразовать матрицу в Эйлер, необходимо знать как преобразуется Эйлер в матрицу, поскольку это обратные друг другу процессы. В новом примере я ее переписал.
Код
set rotation.m11 = X.x
set rotation.m12 = X.y
set rotation.m13 = X.z
set rotation.m21 = Y.x
set rotation.m22 = Y.y
set rotation.m23 = Y.z
set rotation.m31 = Z.x
set rotation.m32 = Z.y
set rotation.m33 = Z.z
Здесь идет неверное назначение параметров матрицы. Дело в том, что матрица записывается следующим образом (из readme библиотеки Math)
m11 m12 m13
m21 m22 m23
m31 m32 m33
При этом, оси записываются слева направо, столбиками, то есть , ось X здесь, это m11, m21 и m31. Следовательно верной записью будет
Код
set rotation.m11 = X.x
set rotation.m21 = X.y
set rotation.m31 = X.z
set rotation.m12 = Y.x
set rotation.m22 = Y.y
set rotation.m32 = Y.z
set rotation.m13 = Z.x
set rotation.m23 = Z.y
set rotation.m33 = Z.z
И самая ложная строка
set rotation = MATRIX3.New_0()
Это создаст нулевую матрицу, то есть матрицу, все значения которой - нули. Базовая же матрица поворота, это единичная матрица, то есть матрица, чья главная диагональ состоит из единиц, а все остальное - нули.
Но это просто заметки, в текущей версии этих участков кода больше нет.
Причина: причин было много, а я искал лишь одну
Самыми распространёнными оказались элементарные ошибки в коде, отсутствие параметров, параметры не того типа данных (привет динамическая типизация) или лишние параметры, из за чего происходили "рандомные рассинхроны при обрыве потока"
Огромное спасибо пользователю prog, что откликнулся и смог найти ошибки, а нашёл он их при помощи языкового сервера sumneko lua для VScode
в 1.26 так делал xgm.guru/p/wc3/163817
Ща mix убраны и архитектура wc переделана, но идея таже - внедриться в процесс варкрафта и найти оффсеты функций.
У морфов есть параметр - неприрываемый это особое состояние юнита, которое нужно чтобы юнит докастовал заклинание в любом случае (если что то метаморфоза это 2 каста скилла, в альтернативную форму и обратно и у обоих есть время каста)
Ну собственно нам нужен скилл на основе морфа демон хантера "Перевоплощение"", начальная и конечная форма - дамми герой, остальные параметры в 0, суем этот скилл в руну а руну вручаем нужному герою и тут же отдаем приказ качтовать что то....
Результат - герой будет кастовать скилл, игнорируя всех и вся, иконки скиллов будут активны, но хоть закликайся.
Выйти из этого состояния можно только одним способом - выполнить любой морф как следует до конка, подходит для этого 'Aave' - Avenger form (морф сфинкса)
SamuraiKing:
есть вариант попроще - изменить способность звездопада, чтобы звезды падали 1 раз, и за каждый нужный промежуток времени создавать дамми и приказывать кастовать
Камеру можно прикрепить к юниту-кастеру. Также можно настроить смещение камеры
local real angle = GetUnitFacing(unit)*bj_DEGTORAD //угол взгляда кастера - угол смещения
local real dist = 300//расстояние, на которое сместится камера.
call SetCameraTargetControllerNoZForPlayer(GetOwningPlayer(unit),unit, dist*Cos(angle), dist*Sin(angle), false)
Графика - Анимация: обратный ход броска и Графика - Анимация: точка броска - графическте составляющие, анима у юнитов проигрывается, и созданы для задержек. Для невидимого dummy-каста это и не нужно
если вам нужна пустышка, то таких есть есть несколько десятков. Но что вам нужно?
чтобы не останавливался перед кастом, и шел дальше выполнять очередь приказов. но такое исключаем, вам же мгновенная нужна. к сожалению, такие абилки, требуют задержек. у меня есть список, но надо проверить CastTime = 0 будет работать на таких?
Анихак лаунчер заточен под борьбу с картой лича, поэтому не дает запускать все карты с мемхаком, пока есть возможноть это обойти - моя карта яркий пример, а так инфы подробной в паблик никто не сливал чтобы ракап не сделал апгрейд защиты...
Все функции прелоада замена на рид/врайт мемхака, и в любом случае проверь права администратора для варкрафта, например JNGP точно запущен с правами админа и всё норм, права на запись есть, а если вар запускаешь с обычными, то у него не будет прав для записи, файл прелоада не создасться как и writestring и дальше всё поедет... MKDimon, Запусти от админа, отпишись
Ну тебе нужно чтобы был прямо таки бафф который можно рассеивать?
Для начала сделай способность, и баф на основе какой нибудь пустышки, подойдет ярость у некромантов, так же переодический триггер который раз в пол секунды проверяет всех юнитов в группе, есть ли у них бафф если юнит мертв или у него нет баффа, то у юнита удаляется способность на доп урон зданиям и сам унит удаляется из группы.
При касте твоим шаманов заклинания на цель, ты добавляешь цель заклинания в группу, которую и перебирает описанный выше триггер.
Надеюсь понятно?
Была у меня раньше кампания "Legacy of Darkness", только она и так была переведена полностью. Наследие Тьмы. Там ещё забавные титры с падающими овцами и Думгуардами были.
ручками каждый триггер, каждое нестандартное описание из РО (очень тяжелый)
Открыть карту w3x MPQ редактором, внутри будет много файлов, в 1 из них будет весь нестандартный текст, загнать содержимой фала в переводчик или перевести вручную, и засунуть обратно в карту, а карту в кампанию
В каких единицах вообще измеряется высота и ширина, судя по всему в попугаях а не пикселях
Не в пикселях. Здесь хорошо показана координатная система интерфейса. В твоем распоряжении координаты от [0, 0] до [0.8, 0.6]. Можно пытаться выходит за пределы этих значений, но отображаться фреймы тогда могут криво.
Исключением из этой системы координат являются стандартные фреймы выходящие за приделы показанного в статье квадрата - мультиборд, иконки героев, фрейм игрового мира, портрет юнита. В их случае упомянутые выше координаты будут соответствовать всему игровому окну, а не только указанному квадрату.
Один фрейм может наследовать параметры другого. В этом случае пишется слово INHERITS и следом имя наследуемого фрейма. При этом вложенные фреймы не наследуются. Чтобы наследовались вложенные фремы тоже, нужно между INHERITS и именем наследуемого фрейма вставить ключевое слово WITHCHILDREN. Drulia_san:
что такое UseActiveContext
Указывает потомку (вложенному фрейму) использовать контекст родителя (объемлющего фрейма). То бишь, id привязанный к экземпляру фрейма во время игры. Например у панели ресурсов (золото/дерево/еда) 24 контекста, на каждого игрока.
Привязывает левый-нижний угол фрейма MyFrame к левому-верхнему углу родительского фрейма, со смещением 0.001, 0.001.
SetAllPoints просто привязывает все точки крепления потомка ко всем точкам крепления родителя. Drulia_san:
с этим даже экспериментировать болезненно и проблемно
Не бесполезно и не проблемно. Каталог игры содержит файлы шаблонов
Только редачить положение стандартных, чтобы создавать свои элементы нужен либо клиент Renderedge либо у ребят приближенных к Личу (Караулов и Анрайз), по факту есть библиотека dll позволяющая отрисовывать фреймы. но её в живую так и не видел. Это глубокие дебри чтобы туда влазить.
Отключай триггер вначале или в конце
Или там есть такая ерунда как owner of ....Переменная типа твой герой. То есть относимая к игроку- владельцу этого героя
Ельнур,
У него три триггера - по одному для каждого игрока.
Если в каждом одна и та же область, что наиболее вероятно - то и происходит описанное в его проблеме.
Я и так и так делал, все равно все умирают((
Поэтому нужно отсеивать. Это сразу для всех, не нужно делать для каждого игрока.
там нужно триггерно добавить в начале, а после удалить триггерно. главная особенность в том, что в таверне в ро никаких юнитов в таверне не должно быть указано. Иначе не работает абилка продажа войск, такая механика
Они будут сами применять способности, но изучать их придется триггерно. Главное, чтобы стояло Игрок - Компьютер у этого игрока, т.к. игрока без контроллера придется только триггерно направлять.
Ты и не найдешь ее в этом акшене, ибо там только стандартные способности.
Можно заставить через кастом скрипт. На примере нестандартной способности, созданной из "Удар Грома":
call IssueImmediateOrderBJ(твой юнит, "thunderclap")
Если для способности-пустышки-друга-спеллмейкеров "Канал", то вместо thunderclap пиши ID, который ты задал Каналу в менеджере объектов. Причем ID там может быть любой, хоть sleep.
Зайди в редактор объектов -> способности -> файл -> экспортировать способности.
Ты сохранишь файл, в котором хранятся способности. Такой же файл есть и в карте.
Это много раз обсуждалось. Какой-то глюк редактора. Попробуй удалить способность, перезагрузиться и создать её заново.
У бота 4 вариант об этом, кстати.
Да ты повторяешься xgm.guru/p/wc3/226412/comments?postid=420138#comment27 Помню ведь, что недавно это уже обсуждали.
Для того чтобы не было косяков с таймингом, я отказался от "затемнение-ввод" и использую затемнение и ввод отдельно. Тогда дерганий не заметно.
Ближе к теме: единственное что можно сделать это посмотреть начинку ф-ии и выдрать оттуда то, что конкретно вам нужно. Тогда работать будет быстрее и более точно. Кроме того, нужно отказаться от wait'ов, т. к. они не точно определяют время.
Самое удивительное: если карта "открыта" - всё работает, чёрная маска создаётся. Если же "разведана" - нет...
Как мне удалось наконец-то выяснить:
Если выставлен флаг "карта открыта" - просто запрещаются туман войны и чёрная маска. И чтобы вернуть всё на место, нужно разрешить их, а потом создать модификатор чёрной маски.
Если выставлен флаг "карта разведана" - ничего не запрещается, но создается модификатор тумана войны на всю карту. И его просто не может перекрыть новый модификатор чёрной маски, который я создаю триггерно. Нужно как-то отловить этот первоначальный модификатор тумана войны - и удалить его. Обращение через "последний созданный модификатор" не помогает. Может быть, есть еще какие-то способы найти и удалить этот модификатор?
Это странно, может область нужно создать во всю карту и её в модификаторе видимости указать? Но сначала попробуй где-то в свойствах карты убрать галочку Скрытые области частично видимы.
Reach, каким образом делается перевоплощение в твоей карте?
Через способность, улучшение или триггерно заменой одного юнита на другой?
Мне кажется, должно сработать через Casting unit.
Я делал через способность.
Сначала нужно создать переменную типа Боевая единица.
Потом установить ей значение - тот юнит, который будет перевоплощаться.
Привязать камеру к юниту (то есть уже к переменной).
Когда юнит применяет способность, поменять значение переменной на Casting unit.
Прикрепить обратно камеру к переменной-юниту.
Обозначения на скрине: Unit [10] - это тот самый юнит
Способность Смена оружия - сделана на основе способности друида ночных эльфов с флагом "Непрерываемый" для того, чтобы можно было перевоплощаться обратно и не терять при этом предметы.
» WarCraft 3 / Увеличение магического урона
» WarCraft 3 / Высота земли
» WarCraft 3 / Дессинхрон
» WarCraft 3 / Обводка у модели
» Администрация XGM / Редактирование старых ресурсов
» WarCraft 3 / Ошибка в способности
» WarCraft 3 / Поворот эффекта
» IrInA Host Bot / Патч
» WarCraft 3 / Новые нативки для мемхака.
» WarCraft 3 / Фреймы на МемХаке
» WarCraft 3 / Время каста
» WarCraft 3 / Не могу найти причину
» WarCraft 3 / Модель жителей
» WarCraft 3 / Не запускается карта с мемхаком
» WarCraft 3 / Способности, созданные на основе одной стандартной
» WarCraft 3 / Бафф на 1 секунду
» WarCraft 3 / Кампания
» WarCraft 3 / скорость дефолтный абилок
» WarCraft 3 / Кастомный интерфейс
» WarCraft 3 / Таверна героев
» WarCraft 3 / Нестандартные способности
» WarCraft 3 / скрытые модели 1.26
» WarCraft 3 / Чёрная маска
» WarCraft 3 / Привязка камеры
» Администрация XGM / мой профиль